package com.titanium.java;

import org.junit.Test;

import java.util.*;

/**
 *@program: JavaSenior
 *@description:
 * Collections: 操作Collectino、Map的工具类
 *
 * 面试题： Collection和Collections的区别？
 *
 *
 *
 *
 *
 *@author: renfei.huang
 *@create: 2021-10-13 14:45
 */
public class CollectionsTest {


    /*
        排序操作：（均为static方法）
        reverse(List)：反转 List 中元素的顺序
        shuffle(List)：对 List 集合元素进行随机排序
        sort(List)：根据元素的自然顺序对指定 List 集合元素按升序排序
        sort(List，Comparator)：根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
        swap(List，int， int)：将指定 list 集合中的 i 处元素和 j 处元素进行交换*/
    @Test
    public void test() {


        ArrayList arrayList = new ArrayList();

        arrayList.add(232);
        arrayList.add(666);
        arrayList.add(23);
        arrayList.add(99);
        arrayList.add(66);
        arrayList.add(888);

        System.out.println(arrayList);


        //Collections.reverse(List)
        Collections.reverse(arrayList);
        System.out.println(arrayList);


        // Collections.shuffle(List)
        Collections.shuffle(arrayList);
        System.out.println(arrayList);

        // Collections.sort(List);
        Collections.sort(arrayList);
        System.out.println(arrayList);

        //交换
        Collections.swap(arrayList, 1, 3);
        System.out.println(arrayList);

    }


    /*    查找、替换
        Object max(Collection)：根据元素的自然顺序，返回给定集合中的最大元素
        Object max(Collection，Comparator)：根据 Comparator 指定的顺序，返回 给定集合中的最大元素
        Object min(Collection)
        Object min(Collection，Comparator)
        int frequency(Collection，Object)：返回指定集合中指定元素的出现次数
        void copy(List dest,List src)：将src中的内容复制到dest中
        boolean replaceAll(List list，Object oldVal，Object newVal)：使用新值替换List 对象的所有旧值*/
    @Test
    public void test2() {

        ArrayList arrayList = new ArrayList();

        arrayList.add(232);
        arrayList.add(666);
        arrayList.add(23);
        arrayList.add(99);
        arrayList.add(66);
        arrayList.add(888);
        arrayList.add(888);


        //int frequency(Collection，Object)
        int frequency = Collections.frequency(arrayList, 888);
        System.out.println(frequency);

        //报异常  java.lang.IndexOutOfBoundsException: Source does not fit in dest
//        List destList = new ArrayList();
//        Collections.copy(destList,arrayList);

        //正确的复制操作
        List destList = Arrays.asList(new Object[arrayList.size()]);
        Collections.copy(destList, arrayList);

        System.out.println(destList);


        //Collections 类中提供了多个 synchronizedXxx() 方法，该方法可使将指定集
        //合包装成线程同步的集合，从而可以解决多线程并发访问集合时的线程安全问题
        List synchronizedList = Collections.synchronizedList(arrayList);



    }

}
